import cv2  
import numpy as np  
import os  
  
# 确保 output 目录存在，如果不存在则创建  
output_dir = './output'  
if not os.path.exists(output_dir):  
    os.makedirs(output_dir)  
  
# 读取图像  
image_path = '1.png'  
image = cv2.imread(image_path)  
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)  
  
# 预处理：二值化  
_, thresh = cv2.threshold(gray, 180, 255, cv2.THRESH_BINARY_INV)  
  
# 查找轮廓  
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)  
  
# 过滤出可能的表格轮廓（根据面积）  
# 注意：这里的面积阈值 1000 是示例值，可能需要根据实际情况调整  
table_contours = [cnt for cnt in contours if cv2.contourArea(cnt) > 1000]  
  
# 对每个轮廓进行切割并保存  
for i, cnt in enumerate(table_contours):  
    x, y, w, h = cv2.boundingRect(cnt)  
    table_region = image[y:y+h, x:x+w]  
      
    # 构建输出文件名和路径  
    output_file_path = os.path.join(output_dir, f'table_{i}.png')  
      
    # 保存切割后的表格图像到 output 目录  
    cv2.imwrite(output_file_path, table_region)  
  
# 可选：在原图上绘制切割线（用于调试）  
debug_image = image.copy()  
for i, cnt in enumerate(table_contours):  
    x, y, w, h = cv2.boundingRect(cnt)  
    cv2.rectangle(debug_image, (x, y), (x+w, y+h), (0, 255, 0), 2)  
  
# 显示带有切割线的原图（用于调试）
cv2.imwrite("./output\default.png" , debug_image)
cv2.waitKey(0)  
cv2.destroyAllWindows()
print("切割完成，已输出到output文件夹中！")
input()
